<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.17"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>XMP Toolkit SDK: AdobeXMPCommon::IVersionable Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="xmp_tagline_small.jpg"/></td>
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">XMP Toolkit SDK
   &#160;<span id="projectnumber">6.0.0</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.17 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('classAdobeXMPCommon_1_1IVersionable.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<div class="header">
  <div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pro-methods">Protected Member Functions</a> &#124;
<a href="classAdobeXMPCommon_1_1IVersionable-members.html">List of all members</a>  </div>
  <div class="headertitle">
<div class="title">AdobeXMPCommon::IVersionable Class Reference</div>  </div>
</div><!--header-->
<div class="contents">

<p>Interface that serves as the base interface for all the externally exposed interfaces which needs to provide evolving versions of the interface.  
 <a href="classAdobeXMPCommon_1_1IVersionable.html#details">More...</a></p>

<p><code>#include &lt;<a class="el" href="IVersionable_8h_source.html">IVersionable.h</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for AdobeXMPCommon::IVersionable:</div>
<div class="dyncontent">
 <div class="center">
  <img src="classAdobeXMPCommon_1_1IVersionable.png" usemap="#AdobeXMPCommon::IVersionable_map" alt=""/>
  <map id="AdobeXMPCommon::IVersionable_map" name="AdobeXMPCommon::IVersionable_map">
<area href="classAdobeXMPCommon_1_1IConfigurationManager__v1.html" title="Version1 of the interface that represents configuration settings controllable by the client." alt="AdobeXMPCommon::IConfigurationManager_v1" shape="rect" coords="303,56,596,80"/>
<area href="classAdobeXMPCommon_1_1IError__v1.html" title="Version1 of the interface that represents an error/warning encountered during processing." alt="AdobeXMPCommon::IError_v1" shape="rect" coords="303,112,596,136"/>
<area href="classAdobeXMPCommon_1_1IObjectFactory__v1.html" title="Version1 of a interface that represents a factory to create various artifacts defined within AdobeXMP..." alt="AdobeXMPCommon::IObjectFactory_v1" shape="rect" coords="303,168,596,192"/>
<area href="classAdobeXMPCommon_1_1IUTF8String__v1.html" title="Version1 of the interface that represents an UTF8String." alt="AdobeXMPCommon::IUTF8String_v1" shape="rect" coords="303,224,596,248"/>
<area href="classAdobeXMPCore_1_1IDOMImplementationRegistry__v1.html" title="Version1 of the interface that serves as a database/registry of all the parsers and serializers avail..." alt="AdobeXMPCore::IDOMImplementationRegistry_v1" shape="rect" coords="303,280,596,304"/>
<area href="classAdobeXMPCore_1_1IDOMParser__v1.html" title="Version 1 of the interface that supports parsing of the XMP Data Model." alt="AdobeXMPCore::IDOMParser_v1" shape="rect" coords="303,336,596,360"/>
<area href="classAdobeXMPCore_1_1IDOMSerializer__v1.html" title="Version1 of the interface that represents an object that can serialize an XMP Data Model to a buffer...." alt="AdobeXMPCore::IDOMSerializer_v1" shape="rect" coords="303,392,596,416"/>
<area href="classAdobeXMPCore_1_1IMetadataConverterUtils__v1.html" title="Version1 of the interface that represents an utility functions that can convert old xmp object(SXMPMe..." alt="AdobeXMPCore::IMetadataConverterUtils_v1" shape="rect" coords="303,448,596,472"/>
<area href="classAdobeXMPCore_1_1INameSpacePrefixMap__v1.html" title="Version1 of the interface that represents map where each entry consists of prefix string as the key a..." alt="AdobeXMPCore::INameSpacePrefixMap_v1" shape="rect" coords="303,504,596,528"/>
<area href="classAdobeXMPCore_1_1INode__v1.html" title="Version1 of the interface that serves as a base interface to all types of nodes in the XMP DOM." alt="AdobeXMPCore::INode_v1" shape="rect" coords="303,560,596,584"/>
<area href="classAdobeXMPCore_1_1INodeIterator__v1.html" title="Interface that represents an iterator over the mutable children of a XMP DOM Node." alt="AdobeXMPCore::INodeIterator_v1" shape="rect" coords="303,616,596,640"/>
<area href="classAdobeXMPCore_1_1IPath__v1.html" title="Version1 of the interface that provides an easy iterative description of a specific path into the XMP..." alt="AdobeXMPCore::IPath_v1" shape="rect" coords="303,672,596,696"/>
<area href="classAdobeXMPCore_1_1IPathSegment__v1.html" title="Version1 of the interface that represents one segment in a path to a node into the XMP tree." alt="AdobeXMPCore::IPathSegment_v1" shape="rect" coords="303,728,596,752"/>
  </map>
</div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:ad6539461695decfaea8a44798db51e54"><td class="memTemplParams" colspan="2">template&lt;typename requestedInterface &gt; </td></tr>
<tr class="memitem:ad6539461695decfaea8a44798db51e54"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="XMP__Environment_8h.html#a917e8e3f02685ec390fa3aee270f7747">XMP_PRIVATE</a> requestedInterface *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classAdobeXMPCommon_1_1IVersionable.html#ad6539461695decfaea8a44798db51e54">GetInterfacePointer</a> ()</td></tr>
<tr class="memdesc:ad6539461695decfaea8a44798db51e54"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the raw pointer to an interface object implementing the requested version.  <a href="classAdobeXMPCommon_1_1IVersionable.html#ad6539461695decfaea8a44798db51e54">More...</a><br /></td></tr>
<tr class="separator:ad6539461695decfaea8a44798db51e54"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1827fc276dd3beb0df9aaab4ad1626d0"><td class="memTemplParams" colspan="2">template&lt;typename requestedInterface &gt; </td></tr>
<tr class="memitem:a1827fc276dd3beb0df9aaab4ad1626d0"><td class="memTemplItemLeft" align="right" valign="top">const <a class="el" href="XMP__Environment_8h.html#a917e8e3f02685ec390fa3aee270f7747">XMP_PRIVATE</a> requestedInterface *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classAdobeXMPCommon_1_1IVersionable.html#a1827fc276dd3beb0df9aaab4ad1626d0">GetInterfacePointer</a> () const</td></tr>
<tr class="memdesc:a1827fc276dd3beb0df9aaab4ad1626d0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the raw pointer to a const interface object implementing the requested version.  <a href="classAdobeXMPCommon_1_1IVersionable.html#a1827fc276dd3beb0df9aaab4ad1626d0">More...</a><br /></td></tr>
<tr class="separator:a1827fc276dd3beb0df9aaab4ad1626d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
Protected Member Functions</h2></td></tr>
<tr class="memitem:a3ccd9a1bdf7008906e094fb4e7f69826"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classAdobeXMPCommon_1_1IVersionable.html#a3ccd9a1bdf7008906e094fb4e7f69826">~IVersionable</a> ()</td></tr>
<tr class="separator:a3ccd9a1bdf7008906e094fb4e7f69826"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac619a81b428c88cfce50feaa91a2479f"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classAdobeXMPCommon_1_1IVersionable.html#ac619a81b428c88cfce50feaa91a2479f">REQ_FRIEND_CLASS_DECLARATION</a> ()</td></tr>
<tr class="separator:ac619a81b428c88cfce50feaa91a2479f"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Interface that serves as the base interface for all the externally exposed interfaces which needs to provide evolving versions of the interface. </p>
<p>Provide pointer to interface requested by client. Requirements on the class type</p><ol type="1">
<li>Need to implement a function GetInterfaceID() returning a unique id for the interface. Only required to be implemented in first version of the interface.</li>
<li>Need to implement a function GetVersionNumber() returning the version of the interface. Required to implemented by each version of the interface. </li>
</ol>

<p class="definition">Definition at line <a class="el" href="IVersionable_8h_source.html#l00030">30</a> of file <a class="el" href="IVersionable_8h_source.html">IVersionable.h</a>.</p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="a3ccd9a1bdf7008906e094fb4e7f69826"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3ccd9a1bdf7008906e094fb4e7f69826">&#9670;&nbsp;</a></span>~IVersionable()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual AdobeXMPCommon::IVersionable::~IVersionable </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p class="definition">Definition at line <a class="el" href="IVersionable_8h_source.html#l00058">58</a> of file <a class="el" href="IVersionable_8h_source.html">IVersionable.h</a>.</p>
<div class="fragment"><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;{}</div>
</div><!-- fragment -->
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="ad6539461695decfaea8a44798db51e54"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad6539461695decfaea8a44798db51e54">&#9670;&nbsp;</a></span>GetInterfacePointer() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename requestedInterface &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="XMP__Environment_8h.html#a917e8e3f02685ec390fa3aee270f7747">XMP_PRIVATE</a> requestedInterface* AdobeXMPCommon::IVersionable::GetInterfacePointer </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the raw pointer to an interface object implementing the requested version. </p>
<dl class="section return"><dt>Returns</dt><dd>a raw pointer to an interface object implementing the requested version. </dd></dl>
<dl class="section attention"><dt>Attention</dt><dd>In case a particular version number is not supported than an error is thrown. </dd></dl>

<p class="definition">Definition at line <a class="el" href="IVersionable_8h_source.html#l00040">40</a> of file <a class="el" href="IVersionable_8h_source.html">IVersionable.h</a>.</p>
<div class="fragment"><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;                                                                       {</div>
<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;                        <a class="code" href="namespaceAdobeXMPCommon.html#ab59e650373a5efadfbfd2486313258a6">pvoid</a> ptr = <a class="code" href="classAdobeXMPCommon_1_1IVersionable.html#ad6539461695decfaea8a44798db51e54">GetInterfacePointer</a>( requestedInterface::GetInterfaceID(),</div>
<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;                                requestedInterface::GetInterfaceVersion() );</div>
<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;                        <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span> requestedInterface * <span class="keyword">&gt;</span>( ptr );</div>
<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;                }</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="IObjectFactory_8h_source.html#l00061">AdobeXMPCommon::IObjectFactory_v1::MakeObjectFactory()</a>.</p>

</div>
</div>
<a id="a1827fc276dd3beb0df9aaab4ad1626d0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1827fc276dd3beb0df9aaab4ad1626d0">&#9670;&nbsp;</a></span>GetInterfacePointer() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename requestedInterface &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">const <a class="el" href="XMP__Environment_8h.html#a917e8e3f02685ec390fa3aee270f7747">XMP_PRIVATE</a> requestedInterface* AdobeXMPCommon::IVersionable::GetInterfacePointer </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the raw pointer to a const interface object implementing the requested version. </p>
<dl class="section return"><dt>Returns</dt><dd>a raw pointer to a const interface object implementing the requested version. </dd></dl>
<dl class="section attention"><dt>Attention</dt><dd>In case a particular version number is not supported than an error is thrown. </dd></dl>

<p class="definition">Definition at line <a class="el" href="IVersionable_8h_source.html#l00053">53</a> of file <a class="el" href="IVersionable_8h_source.html">IVersionable.h</a>.</p>
<div class="fragment"><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;                                                                                   {</div>
<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;                        <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span> IVersionable * <span class="keyword">&gt;</span>( this )-&gt;GetInterfacePointer&lt; requestedInterface &gt;();</div>
<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;                }</div>
</div><!-- fragment -->
</div>
</div>
<a id="ac619a81b428c88cfce50feaa91a2479f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac619a81b428c88cfce50feaa91a2479f">&#9670;&nbsp;</a></span>REQ_FRIEND_CLASS_DECLARATION()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">AdobeXMPCommon::IVersionable::REQ_FRIEND_CLASS_DECLARATION </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>public/include/XMPCommon/Interfaces/BaseInterfaces/<a class="el" href="IVersionable_8h_source.html">IVersionable.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<div class="ttc" id="anamespaceAdobeXMPCommon_html_ab59e650373a5efadfbfd2486313258a6"><div class="ttname"><a href="namespaceAdobeXMPCommon.html#ab59e650373a5efadfbfd2486313258a6">AdobeXMPCommon::pvoid</a></div><div class="ttdeci">void * pvoid</div><div class="ttdef"><b>Definition:</b> <a href="XMPCommonFwdDeclarations_8h_source.html#l00046">XMPCommonFwdDeclarations.h:46</a></div></div>
<div class="ttc" id="aclassAdobeXMPCommon_1_1IVersionable_html_ad6539461695decfaea8a44798db51e54"><div class="ttname"><a href="classAdobeXMPCommon_1_1IVersionable.html#ad6539461695decfaea8a44798db51e54">AdobeXMPCommon::IVersionable::GetInterfacePointer</a></div><div class="ttdeci">XMP_PRIVATE requestedInterface * GetInterfacePointer()</div><div class="ttdoc">Get the raw pointer to an interface object implementing the requested version.</div><div class="ttdef"><b>Definition:</b> <a href="IVersionable_8h_source.html#l00040">IVersionable.h:40</a></div></div>
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="namespaceAdobeXMPCommon.html">AdobeXMPCommon</a></li><li class="navelem"><a class="el" href="classAdobeXMPCommon_1_1IVersionable.html">IVersionable</a></li>
    <li class="footer">Generated by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.17 </li>
  </ul>
</div>
</body>
</html>
